GtkWindow: Fix the shadow width logic
authorOlivier Fourdan <ofourdan@redhat.com>
Fri, 30 Oct 2015 16:38:25 +0000 (17:38 +0100)
committerOlivier Fourdan <ofourdan@redhat.com>
Tue, 3 Nov 2015 08:33:34 +0000 (09:33 +0100)
Previous commit 305b34a "GtkWindow: fix move/get position with CSD"
introduced a regression because some windows presumably use shadows but
actually don't, resulting in a negative offset being wrongly applied.

Problem is that get_shadow_width() would return non-zero shadows even
for windows that have no shadow, thus causing the negative offset.

Fix the logic in get_shadow_width() and gtk_window_should_use_csd() so
that get_shadow_width() returns accurate values.

Bugzilla: https://bugzilla.gnome.org/show_bug.cgi?id=756618

gtk/gtkwindow.c

index 54030caecb19f95ac0693ae7c54b85b30d33b820..61888d47ed31100b77db6547a137924dd5aeefae 100644 (file)
@@ -5948,15 +5948,18 @@ gtk_window_should_use_csd (GtkWindow *window)
   GtkWindowPrivate *priv = window->priv;
   const gchar *csd_env;
 
-  if (priv->csd_requested)
-    return TRUE;
-
   if (!priv->decorated)
     return FALSE;
 
   if (priv->type == GTK_WINDOW_POPUP)
     return FALSE;
 
+  if (priv->csd_requested)
+    return TRUE;
+
+  if (priv->use_client_shadow)
+    return TRUE;
+
 #ifdef GDK_WINDOWING_BROADWAY
   if (GDK_IS_BROADWAY_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window))))
     return TRUE;
@@ -6676,8 +6679,10 @@ get_shadow_width (GtkWindow *window,
   if (!priv->decorated)
     return;
 
-  if (!priv->client_decorated &&
-      !(gtk_window_should_use_csd (window) &&
+  if (!priv->client_decorated)
+    return;
+
+  if (!(gtk_window_should_use_csd (window) &&
         gtk_window_supports_client_shadow (window)))
     return;